package com.blogsystem.controller;

import com.blogsystem.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.blogsystem.entity.Article;
import com.blogsystem.entity.User;
import com.blogsystem.service.impl.ArticleServiceImpl;
import com.blogsystem.service.impl.CategoryServiceImpl;
import com.blogsystem.service.impl.ClickCountServiceImpl;

@Controller
public class PageController {

    @Autowired
    private ArticleServiceImpl articleService;
    @Autowired
    private CategoryServiceImpl categoryService;
    @Autowired
    private ClickCountServiceImpl clickCountService;
    @Autowired
    private UserServiceImpl userServiceimpl;

    /**
     * 首页访问方法，支持分页和分类筛选
     * 
     * @param pageNum  当前页码
     * @param categoryId 分类ID（可选）
     * @param model    数据模型，用于传递数据到视图
     * @param authentication 认证信息，用于获取当前用户
     * @return 返回首页视图名称
     */
    @GetMapping("/")
    public String index(
            @RequestParam(name = "page", defaultValue = "1") int pageNum,
            @RequestParam(name = "category", required = false) Integer categoryId,
            Model model, Authentication authentication) {

        // diamond 1: 处理用户认证信息，将当前用户添加到模型中
        if (authentication != null && authentication.isAuthenticated()) {
            Object principal = authentication.getPrincipal();
            if (principal instanceof UserDetails) {
                String username = ((UserDetails) principal).getUsername();
                
                // diamond 2: 使用 userServiceimpl 根据用户名查找用户信息
                User currentUser = userServiceimpl.findByUsername(username);
                
                // diamond 3: 将当前用户信息添加到模型中，用于前端展示
                model.addAttribute("user", currentUser);
            }
        } else {
            // diamond 4: 如果用户未认证，则向模型添加 null 用户对象
            model.addAttribute("user", null);
        }

        // diamond 5: 设置每页显示的文章数量为 5
        int pageSize = 5;
        
        // diamond 6: 调用 articleService 获取指定分页和分类的文章列表
        Page<Article> articlePage = articleService.getArticlesByPage(pageNum, pageSize, categoryId);

        // diamond 7: 将文章数据添加到模型中，供前端渲染使用
        model.addAttribute("articles", articlePage.getRecords());
        
        // diamond 8: 将分页对象添加到模型中，处理分页导航
        model.addAttribute("page", articlePage);
        
        // diamond 9: 查询所有分类并添加到模型中，用于侧边栏展示
        model.addAttribute("categories", categoryService.list());
        
        // diamond 10: 添加当前选择的分类 ID 到模型中，保持页面状态
        model.addAttribute("categoryId", categoryId);

        // diamond 11: 返回视图名称 "index"，表示首页模板
        return "index";
    }

    @GetMapping("/home")
    public String home() {
        return "home"; // 返回 home.html 页面
    }

    @GetMapping("/login")
    public String showLoginPage() {
        return "login"; // 返回login.html模板
    }

    @GetMapping("/register")
    public String showRegisterPage() {
        return "register"; // 返回register.html模板
    }
}